package com.product.generator;

import com.baomidou.mybatisplus.generator.FastAutoGenerator;
import com.baomidou.mybatisplus.generator.config.OutputFile;
import com.baomidou.mybatisplus.generator.config.rules.DbColumnType;
import com.baomidou.mybatisplus.generator.engine.FreemarkerTemplateEngine;
import org.springframework.boot.test.context.SpringBootTest;

import java.sql.Types;
import java.util.Collections;
import java.util.List;

@SpringBootTest
public class CodeGenerator {
    public static void main(String[] args) {
        String url = "jdbc:mysql://192.168.75.129:3306/product_defects?serverTimezone=Asia/Shanghai&useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull&useSSL=false&allowPublicKeyRetrieval=true";
        String username = "root", password = "admin123";

        List<String> tablesNameList = JDBCUtils.getTablesNameByUrl(url, username, password);


        FastAutoGenerator.create(url, username, password)
                         .globalConfig(builder -> {
                             builder // 设置作者
                                     .enableSwagger() // 开启 swagger 模式
                                     .outputDir("D://generator"); // 指定输出目录
                         })
                         .dataSourceConfig(builder ->
                                 builder.typeConvertHandler((globalConfig, typeRegistry, metaInfo) -> {
                                     int typeCode = metaInfo.getJdbcType().TYPE_CODE;
                                     if (typeCode == Types.SMALLINT) {
                                         // 自定义类型转换
                                         return DbColumnType.INTEGER;
                                     }
                                     return typeRegistry.getColumnType(metaInfo);
                                 })
                         )
                         .packageConfig(builder ->
                                 builder.parent("com.product") // 设置父包名
                                        // .moduleName("system") // 设置父包模块名
                                        .pathInfo(Collections.singletonMap(OutputFile.xml, "D://generator")) // 设置mapperXml生成路径
                         )
                         .strategyConfig(builder ->
                                 builder.addInclude(tablesNameList) // 设置需要生成的表名
                                        .addTablePrefix("t_", "c_") // 设置过滤表前缀
                         )
                         .templateEngine(new FreemarkerTemplateEngine()) // 使用Freemarker引擎模板，默认的是Velocity引擎模板
                         .execute();
    }
}
